import pymysql
from flask import request, jsonify
# 创建蓝图
from flask import Blueprint
from requests import session

from models.SQLsentences import LOGIN, REGISTER
from models.database import connect

main_bp = Blueprint('main', __name__)

@main_bp.route('/api/user/login', methods=['POST'])
def login():
    # 接收前端JSON数据（对应登录表单id：login-username、login-password）
    data = request.get_json()
    # 前端传的是用户名（login-username），对应SQL中的user_email参数（按你的SQL语句配置）
    username = data.get('login-username', '').strip()
    password = data.get('login-password', '').strip()

    # 1. 参数校验（与前端空值提示呼应）
    if not username or not password:
        return jsonify({
            'code': 400,
            'message': '用户名或密码为空。'
        }), 400

    # 2. 数据库连接
    db = connect()
    if not db:
        return jsonify({
            'code': 500,
            'message': '数据库连接失败'
        }), 500

    try:
        with db.cursor(pymysql.cursors.DictCursor) as cursor:
            # 3. 执行你的SQL语句（直接使用提供的LOGIN）
            cursor.execute(LOGIN, (username, password))  # 按SQL顺序传参：user_email=username，user_password=password
            user = cursor.fetchone()

            # 4. 验证用户及密码（明文比对，去掉bcrypt加密）
            if not user:
                return jsonify({
                    'code': 401,
                    'message': '用户名或密码错误'
                }), 401

            # 5. 登录成功响应，添加token字段以满足前端要求
            # 生成简单的token用于前端验证
            token = f"{user['user_name']}_{user['user_email']}_token"
            return jsonify({
                'code': 200,
                'message': '登录成功',
                'data': {
                    'token': token,  # 添加token字段以满足前端验证要求
                    'userInfo': {  # 前端展示的用户信息（仅返回SQL查询到的字段）
                        'username': user['user_name'],
                        'email': user['user_email'],
                        'detectionCount': 0  # 可从数据库查询实际检测次数
                    }
                }
            }), 200

    except Exception as e:
        print(f"登录错误: {str(e)}")
        return jsonify({
            'code': 500,
            'message': f'服务器错误: {str(e)}'
        }), 500
    finally:
        if db:
            db.close()

# 注册接口适配（确保前端参数正确接收）
@main_bp.route('/api/user/register', methods=['POST'])
def register():
    # 接收前端JSON数据（对应注册表单id：username、email、password）
    data = request.get_json()
    username = data.get('username', '').strip()  # 匹配注册用户名输入框id
    email = data.get('email', '').strip()        # 匹配注册邮箱输入框id
    password = data.get('password', '').strip()  # 匹配注册密码输入框id

    # 1. 参数校验（保留基础校验，删除加密相关）
    if not username or not email or not password:
        return jsonify({
            'code': 400,
            'message': '请填写所有必填字段'
        }), 400
    if len(password) < 6:
        return jsonify({
            'code': 400,
            'message': '密码长度建议不少于6位'
        }), 400
    if not '@' in email:  # 简单邮箱格式校验
        return jsonify({
            'code': 400,
            'message': '请输入有效的邮箱格式'
        }), 400

    # 2. 数据库连接
    db = connect()
    if not db:
        return jsonify({
            'code': 500,
            'message': '数据库连接失败'
        }), 500

    try:
        with db.cursor() as cursor:
            # 3. 检查用户名/邮箱是否已注册（修正：避免查询不存在的id字段）
            cursor.execute("SELECT user_name FROM users WHERE user_name = %s", (username,))
            if cursor.fetchone():
                return jsonify({
                    'code': 409,
                    'message': '用户名已被注册'
                }), 409

            cursor.execute("SELECT user_email FROM users WHERE user_email = %s", (email,))
            if cursor.fetchone():
                return jsonify({
                    'code': 409,
                    'message': '邮箱已被注册'
                }), 409

            # 4. 直接使用明文密码（删除bcrypt加密相关代码）
            # 5. 执行注册（修正拼写错误：REGISITER → REGISTER，使用你的SQL语句）
            cursor.execute(REGISTER, (username, email, password))
            db.commit()

            # 6. 注册成功响应（前端会跳转至登录）
            return jsonify({
                'code': 200,
                'message': '注册成功，请登录'
            }), 201

    except Exception as e:
        db.rollback()
        print(f"注册错误: {str(e)}")
        return jsonify({
            'code': 500,
            'message': f'服务器错误: {str(e)}'
        }), 500
    finally:
        if db:
            db.close()